package com.etone.smartAudit.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.etone.smartAudit.domain.AuditExceptionMonth;
import com.etone.smartAudit.dto.ParamDTO;
import com.etone.smartAudit.vo.auditException.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

@Mapper
public interface AuditExceptionMonthMapper extends BaseMapper<AuditExceptionMonth> {

    /**
     * 根据id查询审计异常，主要查询出该审计异常所属的表
     *
     * @param id
     * @return
     */
    AuditExceptionMonth findById(@Param("id") Integer id);

    /**
     * 查询全省最后一个月的记录
     *
     * @return
     */
    AuditExceptionMonthAreaListVO findAreaLastMonth();

    /**
     * 查询全市地区异常数
     *
     * @param typeId
     * @return
     */
    List<AuditExceptionMonthAreaListVO> finAreaCityLastMonth(@Param("typeId") String typeId);

    /**
     * 查询所有异常类型
     *
     * @param specialId
     * @return
     */
    List<AuditExceptionTypeSimpleVO> findTypeSimple(@Param("specialId") Integer specialId);

    /**
     * 查询审计异常拥有月份
     *
     * @param auditExceptionTypeId 审计点id
     * @param countPeriods
     * @return
     */
    List<Integer> findAuditExceptionMonth(@Param("auditExceptionTypeId") Integer auditExceptionTypeId,@Param("countPeriods") String countPeriods);

    /**
     * 查询异常列表
     *
     * @param date
     * @param cityId
     * @param typeId
     * @param specialId
     * @return
     */
    List<AuditExceptionMonthVO> findList(@Param("date") String date, @Param("cityId") Integer cityId, @Param("typeId") Integer typeId, @Param("specialId") Integer specialId);

    /**
     * 查询审计异常类型列表
     *
     * @param specialId
     * @param typeId
     * @return
     */
    List<AuditExceptionTypeVO> findTypeList(@Param("specialId") Integer specialId, @Param("typeId") Integer typeId);

    /**
     * 获取表字段
     *
     * @param databaseName
     * @param tableName
     * @return
     */
    List<AuditExceptionDetailHeadVO> findTableColumn(@Param("databaseName") String databaseName, @Param("tableName") String tableName);

    /**
     * 获取审计详情内容
     *
     * @param tableName
     * @param dates
     * @param cityNames
     * @param params
     * @return
     */
    List<Map<String, Object>> findDetail(@Param("tableName") String tableName, @Param("dates") List<String> dates, @Param("cityNames") List<String> cityNames, @Param("params") List<ParamDTO> params);

    /**
     * 获取未生成本地文件的异常
     *
     * @param force
     * @return
     */
    List<AuditExceptionMonth> findEmptyFileException(@Param("force") boolean force);

    /**
     * 更新文件
     *
     * @param id
     * @param file
     * @return
     */
    int updateFile(@Param("id") Integer id, @Param("file") String file);

    /**
     * 查询区域专题数
     *
     * @param areaId
     * @param date
     * @param countReport
     * @return
     */
    List<AuditExceptionSpecialAreaListVO> findAreaSpecialTotal(@Param("areaId") String areaId, @Param("date") Integer date,@Param("countReport") String countReport);

    /**
     * @param areaId
     * @param cityId
     * @param date
     * @param countPeriods
     * @return
     */
    List<AuditExceptionMonthVO> findAreaSpecialDetail(@Param("areaId") String areaId, @Param("cityId") String cityId, @Param("date") Integer date,@Param("countPeriods") String countPeriods);

    /**
     * 查询专题top
     *
     * @param top
     * @param areaId
     * @param date
     * @param countReport
     * @return
     */
    List<String> findSpecialTop(@Param("top") Integer top, @Param("areaId") String areaId, @Param("date") Integer date, @Param("countReport") String countReport);

    /**
     * 统计报表
     *
     * @param sql
     * @return
     */
    List<Map<String, Object>> findStatisticalReport(@Param("sql") String sql);

}
